package com.liao.search.service;

/**
 * @Author: ljt
 * @Description: 保存product
 * @DateTime: 2025/3/12 下午8:21
 **/

import com.liao.common.doc.ProductDoc;
import com.liao.common.dto.ProductSearchByCategoryRequest;
import com.liao.common.dto.ProductSearchRequest;
import com.liao.common.vo.SearchResult;

import java.io.IOException;
import java.util.List;


public interface ProductService {

    /**
     * 上架商品
     *
     * @return 是否成功
     * @throws IOException
     */
    boolean productStatusUp(List<ProductDoc> skuEsModels) throws IOException;

    /**
     * 根据text搜索产品
     *
     * @param request 搜索请求对象
     * @return
     * @throws IOException
     */
    SearchResult<ProductDoc> search(ProductSearchRequest request) throws IOException;

    /**
     * 返回给根据用户最近访问关键词获取的产品（推荐产品）
     *
     * @param memberId 用户id
     * @param from     从第几条开始
     * @param size     长度
     * @return
     */
    SearchResult<ProductDoc> recommendProducts(Integer memberId, Integer from, Integer size) throws IOException;

    /**
     * 随机获取不同的产品
     *
     * @param size 长度
     * @return
     * @throws IOException
     */
    SearchResult<ProductDoc> radomProducts(Integer size) throws IOException;

    /**
     * 根据接收的关键词查询出搜索提示词
     *
     * @param keyword 所输入的关键词
     * @return 联想词集合
     */
    List<String> getTips(String keyword) throws IOException;

    /**
     * 根据id获取相关产品
     *
     * @param id
     * @return
     */
    List<ProductDoc> getRelevant(String id) throws IOException;

    /**
     * 根据分类id获取相关产品
     *
     * @param request
     * @return
     */
    SearchResult<ProductDoc> searchProductBycategoryId(ProductSearchByCategoryRequest request) throws IOException;
}